# coding=utf-8

import web

import utils
from db import connection
from controllers.admin.administrators import AdminSession
# 持有默认库的操作对象钩子
db = connection.default

# 登录成功
LOGIN_SUCCESS = 'OK'
# 登录失败：用户名无效
LOGIN_INVALID_NAME = '传送人无效。'
# 登录失败：密码无效
LOGIN_INVALID_PWD = '传送口令无效。'
# 登录失败：帐号已被锁定
LOGIN_LOCKED = '帐号已被锁定，无法转送。'
def admin_login(name, pwd):
    '''
    管理员登录逻辑
    '''
    if not name:
        return LOGIN_INVALID_NAME
    if not pwd:
        return LOGIN_INVALID_PWD
    # 读取管理员信息
    admin = get_by_login_name(name)
    # 用户名是否有效
    if not admin:
        return LOGIN_INVALID_NAME
    # 比较密码是否相同
    # 密文比较
    if utils.cmp_i(utils.md5(pwd), admin.login_pwd) != 0:
        return LOGIN_INVALID_PWD
    # 账户是否锁定
    if admin.locked == 1:
        return LOGIN_LOCKED
    # 记录cookie状态
    AdminSession.save_state(admin.id, admin.login_name)
    # 登录成功
    return LOGIN_SUCCESS

def get_by_login_name(login_name):
    '''
    获取给定登录名的管理员记录
    该方法主要在登录时使用
    returns:
        @locked as tinyint 表示账户是否被锁定
        @login_pwd as varchar 加密后的密码
    '''
    set = db.select('administrators'
            , where = 'login_name = $login_name'
            , what = 'id,login_name,login_pwd,locked'
            , vars = locals())
    if set:
        return set[0]
    return False
